package com.lsp.lib_uikit.commonrecycler.rvitem;

import android.content.Context;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.view.View;
import android.widget.RelativeLayout;
import java.util.HashMap;

/**
 * ListItem的抽象类
 * Created by xcj on 16/1/5.
 */
public abstract class ListItem<D> extends RelativeLayout implements Item<D> {

  /**
   * 是否是第一个元素
   */
  protected boolean bFirst = false;

  /**
   * 是否最后一个元素
   */
  protected boolean bLast = false;

  /**
   * 是否是编辑模式
   */
  protected boolean isEditMode = false;

  protected HashMap statusMap;

  /**
   * 关联的数据
   */
  protected D mAttachedData;

  /**
   * 列表位置
   */
  protected int mPosition;

  /**
   * item操作消息处理
   */
  public Handler mHandler = null;

  /**
   * 构造
   *
   * @param context context
   * @param attrs attrs
   */
  public ListItem(Context context, AttributeSet attrs) {
    super(context, attrs);
  }

  @Override public void attachData(D data) {
    mAttachedData = data;
    onAttachData(data);
  }

  /**
   * 当Item关联数据时回调给子类<BR>
   *
   * @param data 数据
   */
  protected abstract void onAttachData(D data);

  protected int onAttachView() {
    return -1;
  }

  @Override public D getData() {
    return mAttachedData;
  }

  /**
   * 设置一个handler,当条目上的按钮被点击等操作触发时，会通过这个handler发送相应的消息<BR>
   *
   * @param handler handler
   */
  public void setHandler(Handler handler) {
    mHandler = handler;
  }

  /**
   * 将事件发送给handler处理<BR>
   *
   * @param what 消息what
   */
  protected void notifyHandler(int what) {
    if (mHandler != null) {
      Message msg = mHandler.obtainMessage(what, mAttachedData);
      mHandler.sendMessage(msg);
    }
  }

  protected void notifyHandler(int what, int arg1) {
    if (mHandler != null) {
      Message msg = mHandler.obtainMessage(what, arg1, 0, mAttachedData);
      mHandler.sendMessage(msg);
    }
  }

  /**
   * 将事件发送给handler处理<BR>
   *
   * @param msg 消息
   */
  protected void notifyHandler(Message msg) {
    if (mHandler != null) {
      mHandler.sendMessage(msg);
    }
  }

  /**
   * 设置条目位置<BR>
   *
   * @param position 位置
   */
  public void setPosition(int position) {
    this.mPosition = position;
  }

  /**
   * 获取条目位置<BR>
   */
  public int getPosition() {
    return mPosition;
  }

  /**
   * 设置是否第一个
   *
   * @param first 值
   */
  public void setFirst(boolean first) {
    this.bFirst = first;
  }

  /**
   * 获取是否为第一个
   */
  public boolean getIsFirst() {
    return this.bFirst;
  }

  /**
   * 设置是否最后一个
   *
   * @param last 值
   */
  public void setLast(boolean last) {
    this.bLast = last;
  }

  /**
   * 获取是否为最后一个
   */
  public boolean getIsLast() {
    return this.bLast;
  }

  /**
   * 设置该ItemView是否是编辑模式
   *
   * @param isEditMode 是否是编辑模式
   */
  public void setIsEditMode(boolean isEditMode, HashMap statusMap) {
    this.isEditMode = isEditMode;
    this.statusMap = statusMap;
  }

  /**
   * 是否是编辑模式
   *
   * @return 是否是编辑模式
   */
  public boolean isEditMode() {
    return isEditMode;
  }

  public void setClickEvent(final int event, final int index) {
    setOnClickListener(new OnClickListener() {
      @Override public void onClick(View view) {
        if (mHandler != null) {
          Message msg = mHandler.obtainMessage(event, index, 0, mAttachedData);
          mHandler.sendMessage(msg);
        }
      }
    });
  }
}
